// O(n)
/**
 * best case:[1,2,3] 0 O(n)
    worst case:[3,2,1] 2 O(n)
    average case:[ 2,1,3] 1 O(n)
 * @param {*} arr 
 * @returns 
 */
function getMin(arr){
    let min=arr[0];
    for (let index = 0; index < arr.length; index++) {
        const element = arr[index];
        if(element<min){
            min=element;
        }
    }
    return min;
}



//O(1)
function isEven(num){
    return num%2===0;
}

// 是否2的平方：1.是否能被2整除，余数 O（log n）,O(n)
function isPowerOfTwo(num){
    // 最小分子是2
    if(num===1 || num/2===1){
        return true;
    }
    // 是否能整除
    if(num%2===0){
        return isPowerOfTwo(num/2)
    }
    return false;
}

// 通过while循环，O（log n）,O(1)
function isPowerOfTwo2(num){
    let divideNum=num;
    while(divideNum!==1){
        if(divideNum%2!==0){
            return false;
        }
        divideNum=divideNum/2;
    }
    return true;
}
 // 幂2的数和下位数对比，总是得到0，O(1)
 function isPowerOfTwo3(num){
    // 4 & 3 => 0100 & 0011 => 0000
    // 7 & 6 => 0111 & 0110 => 0110
    return (num & (num-1)) === 0;
}

// 测试
// for (let index = 0; index < 10; index++) {
//     let pow=Math.pow(2,index)
//     let pow1=pow+1;
//     console.log(pow,isPowerOfTwo(pow),isPowerOfTwo2(pow),isPowerOfTwo3(pow))
//     console.log(pow1,isPowerOfTwo(pow1),isPowerOfTwo2(pow1),isPowerOfTwo3(pow1))
// }




function fact(n){
    let res=n;
    while(n>2){
        // 正常写法
    //   res*=n-1;
    //   n--;

    // 简写
    // res*=--n;//先减再运算
    
    }
        
    return res;
}
console.log(fact(5))
